package builder.construction;

/**
 * 
 * @author Alex
 *
 */
public interface WhereBuilder {
	
	/**
	 * <br/>
	 * <ul><li><strong>equals</strong></li></ul>
	 * <br/>
	 * @param value The value that should be equal to the given column name
	 * @return {@link builder.construction.Builder}
	 */
	public Builder equals(String value);
	
	/**
	 * <br/>
	 * <ul><li><strong>notEquals</strong></li></ul>
	 * <br/>
	 * @param value The value that should not be equal to the given column name
	 * @return {@link builder.construction.Builder}
	 */
	public Builder notEquals(String value);
	
	/**
	 * <br/>
	 * <ul><li><strong>greaterThan</strong></li></ul>
	 * <br/>
	 * @param value The non inclusive minimum value for a given column name
	 * @return {@link builder.construction.Builder}
	 */
	public Builder greaterThan(String value);
	
	/**
	 * <br/>
	 * <ul><li><strong>lessThan</strong></li></ul>
	 * <br/>
	 * @param value The non inclusive maximum value for a given column name
	 * @return {@link builder.construction.Builder}
	 */
	public Builder lessThan(String value);
	
	/**
	 * <br/>
	 * <ul><li><strong>greaterThanOrEquals</strong></li></ul>
	 * <br/>
	 * @param value The minimum value for a given column name
	 * @return {@link builder.construction.Builder}
	 */
	public Builder greaterThanOrEquals(String value);
	
	/**
	 * <br/>
	 * <ul><li><strong>lessThanOrEquals</strong></li></ul>
	 * <br/>
	 * @param value The maximum value for a given column name
	 * @return {@link builder.construction.Builder}
	 */
	public Builder lessThanOrEquals(String value);
	
	/**
	 * <br/>
	 * <ul><li><strong>between</strong></li></ul>
	 * <br/>
	 * @param lowerBound The lower bound for a given column name
	 * @param upperBound The upper bound for a given column name
	 * @return {@link builder.construction.Builder}
	 */
	public Builder between(String lowerBound, String upperBound);
	
	/**
	 * <br/>
	 * <ul><li><strong>like</strong></li></ul>
	 * <br/>
	 * % allows you to match any string of any length (including zero length)
	 * <br/>
	 * _ allows you to match on a single character
	 * <br/>
	 * @param value The value or expression the given column should match
	 * @return {@link builder.construction.Builder}
	 */
	public Builder like(String value);
	
	/**
	 * <br/>
	 * <ul><li><strong>in</strong></li></ul>
	 * <br/>
	 * @param values A list of allowed values
	 * @return {@link builder.construction.Builder}
	 */
	public Builder in(String... values);

}
